#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_SIZE 256
#define MAX_IP_ADDRESSES 10 // 最大 IP 地址数量
#define IP_ADDRESS_LENGTH 16 // IPv4 地址的最大长度

void get_mac_address() {
    FILE *fp;
    char buffer[BUFFER_SIZE];
    char mac_address[18]; // MAC地址的长度为17个字符 + 1个结束符
    char ip_addresses[MAX_IP_ADDRESSES][IP_ADDRESS_LENGTH]; // 存储多个 IP 地址
    int found_mac = 0;
    int ip_count = 0;

    // 执行 ifconfig 命令
    fp = popen("ifconfig", "r");
    if (fp == NULL) {
        perror("popen failed");
        return;
    }

    // 逐行读取输出
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        // 打印每一行输出以进行调试
        printf("Output line: %s", buffer); // 添加调试信息

        // 查找 MAC 地址行
        if (strstr(buffer, "ether") != NULL) {
            // 使用 strtok 提取 MAC 地址
            char *token = strtok(buffer, " ");
            while (token != NULL) {
                if (strcmp(token, "ether") == 0) {
                    token = strtok(NULL, " "); // 获取下一个 token
                    if (token != NULL) {
                        strncpy(mac_address, token, sizeof(mac_address) - 1);
                        mac_address[sizeof(mac_address) - 1] = '\0'; // 确保字符串以 null 结尾
                        found_mac = 1;
                    }
                    break;
                }
                token = strtok(NULL, " ");
            }
        }

        // 查找 IP 地址行
        //if (strstr(buffer, "inet ") != NULL && strstr(buffer, "eth0") != NULL) { // 只处理 eth0 的 IP 地址
        if (strstr(buffer, "inet ") != NULL) {
            // 使用 strtok 提取 IP 地址
            char *token = strtok(buffer, " ");
            while (token != NULL) {
                if (strcmp(token, "inet") == 0) {
                    token = strtok(NULL, " "); // 获取下一个 token
                    if (token != NULL && ip_count < MAX_IP_ADDRESSES) {
                        strncpy(ip_addresses[ip_count], token, IP_ADDRESS_LENGTH - 1);
                        ip_addresses[ip_count][IP_ADDRESS_LENGTH - 1] = '\0'; // 确保字符串以 null 结尾
                        ip_count++;
                    }
                    break;
                }
                token = strtok(NULL, " ");
            }
        }
    }

    // 关闭文件指针
    pclose(fp);

    // 输出结果
    if (found_mac) {
        printf("MAC Address: %s\n", mac_address);
    } else {
        printf("MAC Address not found.\n");
    }

    // 输出所有 IP 地址
    printf("IP Addresses:\n");
    for (int i = 0; i < ip_count; i++) {
        printf("%s\n", ip_addresses[i]);
    }
}

int main() {
    get_mac_address();
    return 0;
}